class Chef
  class Provider
    class MysqlService
      class Smf < Chef::Provider::MysqlService
        action :start do
          method_script_path = "/lib/svc/method/#{mysql_name}" if node['platform'] == 'omnios'
          method_script_path = "/opt/local/lib/svc/method/#{mysql_name}" if node['platform'] == 'smartos'

          template "#{new_resource.name} :start #{method_script_path}" do
            path method_script_path
            cookbook 'mysql'
            source 'smf/svc.method.mysqld.erb'
            owner 'root'
            group 'root'
            mode '0555'
            variables(
              base_dir: base_dir,
              data_dir: parsed_data_dir,
              defaults_file: defaults_file,
              error_log: error_log,
              mysql_name: mysql_name,
              mysqld_bin: mysqld_bin,
              pid_file: pid_file
              )
            action :create
          end

          smf "#{new_resource.name} :start #{mysql_name}" do
            name mysql_name
            user new_resource.run_user
            group new_resource.run_group
            start_command "#{method_script_path} start"
          end

          service "#{new_resource.name} :start #{mysql_name}" do
            service_name mysql_name
            provider Chef::Provider::Service::Solaris
            supports restart: true
            action [:enable]
          end
        end

        action :stop do
          service "#{new_resource.name} :stop #{mysql_name}" do
            service_name mysql_name
            provider Chef::Provider::Service::Solaris
            supports restart: true
            action :stop
          end
        end

        action :restart do
          service "#{new_resource.name} :restart #{mysql_name}" do
            service_name mysql_name
            provider Chef::Provider::Service::Solaris
            supports restart: true
            action :restart
          end
        end

        action :reload do
          service "#{new_resource.name} :reload #{mysql_name}" do
            provider Chef::Provider::Service::Solaris
            service_name mysql_name
            supports reload: true
            action :reload
          end
        end

        def create_stop_system_service
          # nothing to do here
        end

        def delete_stop_service
          service "#{new_resource.name} :delete #{mysql_name}" do
            service_name mysql_name
            provider Chef::Provider::Service::Solaris
            supports restart: true
            action :stop
          end
        end
      end
    end
  end
end
